// biji/pages/arrFn/arrFn.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    list1: [1, 2, 3, 4, 5, 6, 'hello', 6, 6, 7, 9],
    list2: [{
        id: 1,
        name: '小明',
        gender: '男',
        score: 100
      },
      {
        id: 2,
        name: '小磊',
        gender: '男',
        score: 59
      },
      {
        id: 3,
        name: '小红',
        gender: '女',
        score: 89
      },
      {
        id: 4,
        name: '小丽',
        gender: '女',
        score: 90
      },
      {
        id: 5,
        name: '小武',
        gender: '男',
        score: 66
      }
    ]
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.arrList1()
    this.arrList2()
  },
  // list1数组处理方法：
  arrList1() {
    let list = this.data.list1
    // push: 往数组的最后一个位置追加元素
    // list.push(7)
    // console.log(list)

    // unshift: 往数组的第一个位置追加元素
    // list.unshift(0)
    // console.log(list)

    // pop: 移除数组中的最后一个元素，并返回这个被删除的元素
    // var result = list.pop()
    // console.log(result)
    // console.log(list)

    // shift: 移除数组中的第一个元素，并返回这个被删除的元素
    // var result = list.shift()
    // console.log(result)
    // console.log(list)

    // splice: 移除数组某个位置的元素，可以移除多个
    // 参数1：要开始删除的索引位置
    // 参数2：表示要删除几个
    // 参数3往后: 表示要替补的元素， 可以是多个
    // var result = list.splice(1, 1, 666, 888)
    // console.log(result)
    // console.log(list)

    // slice: 切割数组，返回新数组，不会对原始数组造成影响
    // 参数1：切割的起始位置（包含该元素）
    // 参数2：切割的结束位置（不包含该元素）
    // 如果只传一个参数，表示从这个位置截到最后一个元素
    // var result = list.slice(2)
    // console.log(result)
    // console.log(list)

    // concat: 实现数组拼接,返回新数组，不影响原数组
    // var result = list.concat(7, 8, 9)
    // var result = list.concat([7, 8, 9])
    // console.log(result)
    // console.log(list)

    // reverse: 数组反转, 返回新数组，会影响原数组
    // var result = list.reverse()
    // console.log(result)
    // console.log(list)

    // sort: 数组排序, 返回新数组，会影响原数组
    // var result = list.sort()
    // console.log(result)
    // console.log(list)

    // join: 把数组用字符串拼接, 返回拼接后的字符串
    // var result = list.join('-')
    // console.log(result)
    // console.log(list)

    // toString： 把数组转成字符串
    // var result = list.toString()
    // console.log(result)

    // indexOf: 查询某个元素的索引位置， 返回第一个出现的元素的索引
    // 如果元素不存在，返回-1， 可以通过此方法判断元素存不存在
    // var result = list.indexOf(6)
    // console.log(result)

    // lastIndexOf: 查询某个元素的索引位置， 返回最后一个出现的元素的索引
    // var result = list.lastIndexOf(6)
    // console.log(result)

    // includes: 判断某个元素是否存在
    // var result = list.includes(33)
    // console.log(result)
  },
  // list2数组处理方法：
  arrList2() {
    let list = this.data.list2
    // forEach: 遍历数组，会遍历到数组的每个元素
    // list.forEach(item => {
    //   console.log(item.id)
    // })

    // filter: 过滤数组，遍历所有元素，会根据某个条件对数组进行过滤，最终返回一个新数组，不会影响原数组
    // var result = list.filter(item => {
    //   // if (item.gender === '男') {
    //   //   return true
    //   // } else {
    //   //   return false
    //   // }
    //   // return item.gender === '男'
    //   return item.score >= 60
    // })

    // console.log(result)

    // map: 根据原数组，遍历所有元素，返回一个新的数组，但是数组元素结构可能会发生变化
    // 回调函数中返回新数组的每一个元素
    // var result = list.map(item => {
    //   return { username: item.name }
    // })
    // console.log(result)

    // some: 用于查询数组中是否有符合条件的某个元素，如果有，返回true，没有，就返回false
    // 遍历的次数不确定，一旦找到符合条件的，就立即返回true，不再遍历
    // var result = list.some(item => {
    //   console.log(item.id)
    //   return item.score < 60
    // })

    // console.log(result)

    // every: 用于查询数组中是否每一个元素都符合条件，如果都符合，返回true, 如果有不符合的，返回false
    // 遍历的次数不确定，一旦找到不符合条件的，就立即返回false，不再遍历
    // var result = list.every(item => {
    //   console.log(item.id)
    //   return item.score >= 60
    // })

    // console.log(result)

    // find: 查找符合条件的某个元素，返回元素对象
    // 遍历的次数不确定，一旦找到符合条件的，就立即返回该元素对象，中止遍历
    // var result = list.find(item => {
    //   console.log(item.id)
    //   return item.score < 60
    // })
    // console.log(result)

    // findIndex: 查找符合条件的某个元素，返回元素的索引
    // 如果没找着，返回-1
    // 遍历的次数不确定，一旦找到符合条件的，就立即返回该元素对象的索引，中止遍历
    // var result = list.findIndex(item => {
    //   console.log(item.id)
    //   return item.score < 60
    // })
    // console.log(result)

    // sort: 根据对象的某个字段进行排序
    // 若 a 小于 b，在排序后的数组中 a 应该出现在 b 之前，则返回一个小于 0 的值。
    // 若 a 等于 b，则返回 0。
    // 若 a 大于 b，则返回一个大于 0 的值。
    var result = list.sort((a, b) => {
      return a.score - b.score
    })
    console.log(result)
  }
})